package org.online.listener;

import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.online.conmon.Const;
import org.online.entity.User;

/**
 * 监听退出登录，把退出登录的用户从map集合中移除 -- 会话生命周期的监听器
 * @author Administrator
 *
 */
@WebListener
public class LogoutListener implements HttpSessionListener{

	@Override
	public void sessionCreated(HttpSessionEvent se) {
		
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		
		// 1.获取退出登录的用户
		HttpSession session = se.getSession();
		User user = (User)session.getAttribute(Const.LOGIN_USER);
		
		// 2.从上下文对象中获取map集合
		ServletContext context = session.getServletContext();
		@SuppressWarnings("unchecked")
		Map<String,User> map = (Map<String,User>)context.getAttribute(Const.ONLINE_USER_MAP) ;
		
		// 3.从map集合中移除退出用户
		if(user!=null) {
			map.remove(user.getUsername()) ;
		}
		
		// 4.重新把map集合存在在上下文对象中 - 更新
		context.setAttribute(Const.ONLINE_USER_MAP, map);
	}

}
